package com.mdxq.mall.product.controller;

import cn.hutool.core.util.StrUtil;
import com.mdxq.mall.product.entity.Product;
import com.mdxq.mall.product.service.ProductService;
import com.mdxq.mall.response.R;
import com.mdxq.mall.vo.ProductBaseInfoVo;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * 商品信息 控制层。
 *
 * @author ShuJie
 * @since 2025-01-12
 */
@RestController
@RequestMapping("/api/v1/product")
public class ProductController {

    @Autowired
    private ProductService productService;

    /**
     * 添加商品信息。
     *
     * @param product 商品信息
     * @return {@code true} 添加成功，{@code false} 添加失败
     */
    @PostMapping("save")
    public R save(@RequestBody Product product) {
        return productService.save(product)?R.ok(true):R.ok(false);
    }

    /**
     * 根据主键删除商品信息。
     *
     * @param id 主键
     * @return {@code true} 删除成功，{@code false} 删除失败
     */
    @DeleteMapping("remove/{id}")
    public boolean remove(@PathVariable Integer id) {
        return productService.removeById(id);
    }

    /**
     * 根据主键更新商品信息。
     *
     * @param product 商品信息
     * @return {@code true} 更新成功，{@code false} 更新失败
     */
    @PutMapping("update")
    public R update(@RequestBody Product product) {
        return productService.updateById(product)?R.ok(true):R.ok(false);
    }

    @PostMapping("update/deleteStatus")
    public R updateDeleteStatus(@RequestParam String ids,@RequestParam Integer deleteStatus){
        return productService.updateDeleteStatus(ids,deleteStatus)?R.ok(true):R.ok(false);
    }

    /**
     * 查询所有商品信息。
     *
     * @return 所有数据
     */
    @GetMapping("list")
    public R list() {
        return R.ok(productService.list());
    }

    /**
     * 根据商品信息主键获取详细信息。
     *
     * @param id 商品信息主键
     * @return 商品信息详情
     */
    @GetMapping("getInfo/{id}")
    public R getInfo(@PathVariable Integer id) {
        return R.ok(productService.getById(id));
    }

    /**
     * 根据商品信息主键获取基本信息。
     *
     * @param id 商品信息主键
     * @return 商品信息详情
     */
    @GetMapping("getBaseInfo/{id}")
    public R getBaseInfo(@PathVariable Long id) {
        QueryWrapper wrapper=new QueryWrapper();
        wrapper.eq("id",id);
        wrapper.select("id","name","product_sn","price","stock");
        return R.ok(productService.getOneAs(wrapper, ProductBaseInfoVo.class));
    }

    /**
     *
     * @param page 分页对象
     * @param keyword 查询关键字
     * @param publishStatus 上架状态
     * @param verifyStatus 审核状态
     * @param productSn 商品sn编码
     * @param productCategoryId 商品类别id
     * @param brandId 品牌id
     * @return 分页对象
     */
    @GetMapping("page")
    public R page(Page<Product> page,String keyword,
                  Integer publishStatus,
                  Integer verifyStatus,
                  String productSn,
                  Integer productCategoryId,
                  Long brandId) {
        QueryWrapper queryWrapper=new QueryWrapper();
        if(StrUtil.isNotBlank(keyword)){
            queryWrapper.like("name",keyword);
        }
        if(publishStatus!=null){
            queryWrapper.eq("publish_status",publishStatus);
        }
        if(verifyStatus!=null){
            queryWrapper.eq("verify_status",verifyStatus);
        }
        if(StrUtil.isNotBlank(productSn)){
            queryWrapper.eq("product_sn",productSn);
        }
        if(productCategoryId!=null){
            queryWrapper.eq("product_category_id",productCategoryId);
        }
        if(brandId!=null){
            queryWrapper.eq("brand_id",brandId);
        }
        return R.ok(productService.page(page,queryWrapper));
    }

}
